
package protocol.meta;

import java.util.List;

import org.json.JSONObject;

import android.os.Parcel;
import android.os.Parcelable;

import com.google.gson.Gson;
import com.google.gson.JsonElement;

/**
 * {"userId":"6723","nickname":"test","userType":0,"loginType":0,"userAttr":5}
 *
 * @author
 */
public class User implements Parcelable {

    public String userId; // 用户id
    public String nickname; // 用户昵称
    public String avatar; // 用户头像
    public int userType; // 用户类型，0普通用，1官方用户
    public int userAttr; // 当userType为官方用户时：1，游戏类；2，综合类。当userType为普通用户时：5，普通，6，加V；
    public String signature; // 用户签名
    public int follow;// 我是否follow某用户?0,不关注该用户，1关注该用户
    public int followed;// 某用户是否follow我?0，不关注当前用户，1关注当前用户
    public int gender;// 性别 1:男 2:女 3:保密
    public long birthday;// 用户生日
    public String province;// 省
    public String city;// 城市
    public String description;// 认证用户描述信息
    public String detailDescription;// 认证详细信息
    public long lastLoginTime;// 用户最后一次登录时间
    public int focusCount;// 用户关注数
    public int fansCount;// 用户粉丝数
    public int infoCount;// 用户讨论数
    public int subscribeCount;// 用户订阅数
    public int commentCount;// 用户评论数
    public int praiseCount;// 用户赞数
    public boolean shareLocation;// 是否开启位置显示
    public List<Subject> subjectList;// 用户订阅主题
    public String reason;// 推荐理由

    public int loginType;// TODO 登陆类型，文档缺

    public static User fromJson(JSONObject json) {
        Gson gson = new Gson();
        return gson.fromJson(json.toString(), User.class);
    }

    public static User fromJson(JsonElement json) {
        Gson gson = new Gson();
        return gson.fromJson(json, User.class);
    }

    public static User fromJson(String jsonStr) {
        Gson gson = new Gson();
        return gson.fromJson(jsonStr, User.class);
    }

    public User() {
        // Do Noting
    }

    public static final Parcelable.Creator<User> CREATOR = new Parcelable.Creator<User>() {

        @Override
        public User createFromParcel(Parcel in) {
            return new User(in);
        }

        @Override
        public User[] newArray(int size) {
            return new User[size];
        }
    };

    private User(Parcel in) {
        userId = in.readString(); // 用户id
        nickname = in.readString(); // 用户昵称
        avatar = in.readString(); // 用户头像
        userType = in.readInt(); // 用户类型，0普通用，1官方用户
        userAttr = in.readInt(); // 当userType为官方用户时：1，游戏类；2，综合类。当userType为普通用户时：5，普通，6，加V；
        signature = in.readString(); // 用户签名
        follow = in.readInt();// 我是否follow某用户?0,不关注该用户，1关注该用户
        followed = in.readInt();// 某用户是否follow我?0，不关注当前用户，1关注当前用户
        gender = in.readInt();// 性别 1:男 2:女 3:保密
        birthday = in.readLong();// 用户生日
        province = in.readString();// 省
        city = in.readString();// 城市
        description = in.readString();// 认证用户描述信息
        detailDescription = in.readString();// 认证详细信息
        lastLoginTime = in.readLong();// 用户最后一次登录时间
        focusCount = in.readInt();// 用户关注数
        fansCount = in.readInt();// 用户粉丝数
        infoCount = in.readInt();// 用户讨论数
        subscribeCount = in.readInt();// 用户订阅数
        commentCount = in.readInt();// 用户评论数
        praiseCount = in.readInt();// 用户赞数
        shareLocation = (Boolean)in.readValue(boolean.class.getClassLoader());// 是否开启位置显示
        // subjectList;// 用户订阅主题
        reason = in.readString();// 推荐理由
        loginType = in.readInt();// TODO 登陆类型，文档缺
    }

    @Override
    public int describeContents() {
        return 0;
    }

    @Override
    public void writeToParcel(Parcel dest, int flags) {
        dest.writeString(userId);
        dest.writeString(nickname);
        dest.writeString(avatar);
        dest.writeInt(userType);
        dest.writeInt(userAttr);
        dest.writeString(signature);
        dest.writeInt(follow);
        dest.writeInt(followed);
        dest.writeInt(gender);
        dest.writeLong(birthday);
        dest.writeString(province);
        dest.writeString(city);
        dest.writeString(description);
        dest.writeString(detailDescription);
        dest.writeLong(lastLoginTime);
        dest.writeInt(focusCount);
        dest.writeInt(fansCount);
        dest.writeInt(infoCount);
        dest.writeInt(subscribeCount);
        dest.writeInt(commentCount);
        dest.writeInt(praiseCount);
        dest.writeValue(shareLocation);
        // dest.writeList(subjectList);//未实现Parcelable
        dest.writeString(reason);
        dest.writeInt(loginType);
    }

}
